/**
 * Created by 97203 on 2018/06/08.
 */
$(function () {
    var role_datagrid = $("#role_datagrid");
    var role_dialog = $("#role_dialog");
    var role_form = $("#role_form");
    var menu_combotree = $("#menu_combotree");
    var allPermissions = $("#allPermission");
    var selfPermissions = $("#selfPermission");
    role_datagrid.datagrid({
        url: '/role/query.do',
        fitColumns: true,
        fit: true,
        pagination: true,    //分页条
        rownumbers: true,     //行号列
        singleSelect: true,
        toolbar: '#tb',
        columns: [[
            {field: 'sn', title: '角色编号', width: 100},
            {field: 'name', title: '角色名称', width: 100},
        ]]
    })
    role_dialog.dialog({
        width: 620,
        height: 480,
        buttons: '#btn',
        closed: true,
        //在窗口关闭的时候触发事件
        onClose: function () {
            //清空表单数据
            role_form.form('clear');
            //关闭后已有权限需要清空
            selfPermissions.datagrid('loadData',[]);
            //所有权限需要重新加载
            allPermissions.datagrid('load');
        }
    })

    var methodObj = {
        add: function () {
            //设置标题
            role_dialog.dialog('setTitle', '新增角色');
            //打开弹出框
            role_dialog.dialog('open');
        },
        edit: function () {

            var row = role_datagrid.datagrid('getSelected');
            if (!row) {
                $.messager.alert('温馨提示', '请选中要编辑的数据！', 'warning');
                return;
            }
            //回显菜单
            $.get('/role/getMenuIdByRoleId.do',{roleId:row.id},function (data) {
                menu_combotree.combotree('setValues',data)
            })
            //回显权限的数据
            selfPermissions.datagrid('load',{roleId:row.id});
            //把数据回显到表单中
            role_form.form('load', row);
            //设置标题
            role_dialog.dialog('setTitle', '编辑角色');
            //打开弹出框
            role_dialog.dialog('open');

        },
        reload: function () {
            role_datagrid.datagrid('reload');
        },
        save: function () {
            //提交ajax
            role_form.form('submit', {
                url: '/role/saveOrUpdate.do',
                onSubmit:function (param) {
                    //获取已有权限中的所有的id值
                    var rows = selfPermissions.datagrid('getRows');
                    for(var i=0;i<rows.length;i++){
                        //提交额外的参数
                        param['permissions['+i+'].id'] = rows[i].id;
                    }
                    var menus = menu_combotree.combotree('getValues');
                    for(var i=0;i<menus.length;i++){
                        //提交额外的参数
                        param['menus['+i+'].id'] = menus[i];
                    }
                },
                success: function (data) {
                    data = $.parseJSON(data)
                    if (data.success) {
                        $.messager.alert('温馨提示', '保存成功！', 'info', function () {
                            //关闭弹出框
                            methodObj.cancel();
                            //在dataGrid重新加载数据
                            role_datagrid.datagrid('reload');
                        });
                    } else {
                        $.messager.alert('温馨提示', data.msg, 'warning');
                    }
                }
            })
        },
        remove: function () {
            var row = role_datagrid.datagrid('getSelected');
            if (!row) {
                $.messager.alert('温馨提示', '请选中要操作的数据！', 'warning');
                return;
            }
            $.messager.confirm('确认对话框', '您想要执行操作吗？', function (r) {
               if(r){
                   $.get('/role/delete.do', {id: row.id}, function (data) {
                       if (data.success) {
                           $.messager.alert('温馨提示', '操作成功！', 'info', function () {
                               role_datagrid.datagrid('reload');
                           });
                       } else {
                           $.messager.alert('温馨提示', data.msg, 'warning');
                       }
                   })
               }
            });
        },
        cancel: function () {
            role_dialog.dialog('close');
        },
        query: function () {
            var keyword = $("[name=keyword]").val();
            role_datagrid.datagrid('load', {
                keyword: keyword
            })
        }
    }
    $("a[data-cmd]").click(function () {
        //获取按钮上的data-cmd的值
        var methodName = $(this).data("cmd");
        methodObj[methodName]();
    })

    allPermissions.datagrid({
        title: '所有权限',
        height: 350,
        rownumbers: true,
        url:'/permission/selectAll.do',
        fitColumns: true,
        onClickRow:function (index,row) {
            //把选中的数据添加到已有的权限中
            selfPermissions.datagrid('appendRow',row);
            //把该数据从所有权限中移除
            allPermissions.datagrid('deleteRow',index);
        },
        columns: [[
            {field: 'name', title: '权限名称', width: 100, align: 'center'}
        ]]
    })
    selfPermissions.datagrid({
        title: '已有权限',
        height: 350,
        url:'/role/selectPermissions.do',
        rownumbers: true,
        fitColumns: true,
        columns: [[
            {field: 'name', title: '权限名称', width: 100, align: 'center'}
        ]],
        onClickRow:function (index,row) {
            //把选中的数据添加到已有的权限中
            allPermissions.datagrid('appendRow',row);
            //把该数据从所有权限中移除
            selfPermissions.datagrid('deleteRow',index);
        },
        onLoadSuccess:function (data) {
            //1，把已有权限中的数据取出来，将其中的id放到一个数组中
            var ids= $.map(data.rows,function (p) {
                return p.id;
            })
            //2, 获取所有权限中的数据，遍历该集合
            var rows = allPermissions.datagrid('getRows');
            //3，取出来每一个权限的id，判断是否在ids数组中，如果在就需要在所有权限中删除
            for(var i=rows.length-1;i>=0;i--){
                var permission = rows[i];
                var index = $.inArray(permission.id,ids)
                if(index >= 0){
                    allPermissions.datagrid('deleteRow',i);
                }
            }
        }

    }),

    menu_combotree.combotree({
        width:250,
        onCheck:function (node,checked) {
            if(checked){
                var treeObj = menu_combotree.combotree('tree');
                var parent = treeObj.tree('getParent',node.target)
                if(parent){
                    treeObj.tree('check',parent.target);
                }
            }
        }
    })
})
